package com.gimi.cloud.jimi.common.utils;

import java.text.DecimalFormat;



//import java.util.Locale;

/**
 * 数字操作功能类. <p/> 最后更新：2007-04-01
 * 
 */
public class DigitalUtil {
	/**
	 * 检查字符串是否为short类型
	 * @param input
	 * @return
	 */
	public static boolean isShort(String input){
		if(StringUtil.isEmpty(input)){
			return false;
		}
		try{
			Short.parseShort(input);
			return true;
		}catch(Exception e){
			return false;
		}
	}
	/**
	 * 检查字符串中是否是Float型数字
	 * 
	 * @param input 输入字符串
	 * @return 如果包含非Float型字符则返回false
	 */
	public static boolean isFloat(String input) {
		if (StringUtil.isEmpty(input)) {
			return false;
		}
		try {
			Float.parseFloat(input);
			return true;
		} catch (Exception ex) {
			return false;
		}
	}

	/**
	 * 检查字符串中是否是Double型数字
	 * 
	 * @param input 输入字符串
	 * @return 如果包含非Double型字符则返回false
	 */
	public static boolean isDouble(String input) {
		if (StringUtil.isEmpty(input)) {
			return false;
		}
		try {
			Double.parseDouble(input);
			return true;
		} catch (Exception ex) {
			return false;
		}
	}

	/**
	 * 格式化为DOUBLE
	 * @param str
	 * @return
	 */
	public static Double formatDouble(String str){
		if("null".equals(str) || str == null){
			return null;
		}else if(isDouble(str)){
			return Double.parseDouble(str);
		}
		return null;
	}
	
	/**
	 * 检查字串中是否全部是数字字符
	 * 
	 * @param input 输入字符串
	 * @return 如果包含非数字字符则返回false
	 */
	public static boolean isDigital(String input) {
		if (StringUtil.isEmpty(input)) {
			return false;
		}
		for (int i = 0; i < input.length(); i++) {
			if (!Character.isDigit(input.charAt(i))) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 判断是否是int型
	 * 
	 * @param input String
	 * @return boolean
	 */
	public static boolean isInt(String input) {
		if (StringUtil.isEmpty(input)) {
			return false;
		}
		try {
			Integer.parseInt(input);
			return true;
		} catch (NumberFormatException ex) {
			return false;
		}
	}

	/**
	 * 在数字前面补零. <p/> 在数值前面补零，整个字符串达到固定长度，主要用于银行帐号，单据编号等
	 * 
	 * @param num 转换的数值
	 * @param length 使整个串达到的长度
	 * @return 数值前面补零的固定长度的字符串
	 */
	public static String appendZero(int num, int length) {
		String tmpString = String.valueOf(num);
		for (int i = tmpString.length(); i < length; i++) {
			tmpString = "0" + tmpString;
		}
		return tmpString;
	}

	/**
	 * 格式化数值
	 * 
	 * @param num 待格式化整形数值
	 * @param pattern 格式样式："####"和"#,###"， #表示整数位数，0表示小数位数，如果不是指定样式，返回原数值
	 * @return 符合格式的字符串
	 */
	public static String numberFormat(long num, String pattern) {
		String patterns[] = { "####", "#,###" };
		if (!StringUtil.isIn(pattern, patterns)) {
			return String.valueOf(num);
		}
		DecimalFormat df = new DecimalFormat(pattern);
		return df.format(num);
	}

	/**
	 * 格式化数值
	 * 
	 * @param num 待格式化实型数值
	 * @param pattern 格式样式："#,###.00"、"####.00"和"####", "#,###"，#表示整数位数，0表示小数位数，如果不是指定样式，返回原数值
	 * @return 符合格式的字符串
	 */
	public static String numberFormat(double num, String pattern) {
		String patterns[] = { "#,###.00", "####.00", "####", "#,###" , "###0.00"};
		if (!StringUtil.isIn(pattern, patterns)) {
			return String.valueOf(num);
		}
		DecimalFormat df = new DecimalFormat(pattern);
		return df.format(num);
	}

	/**
	 * 奇数校验
	 * 
	 * @param input
	 * @return
	 */
	public static boolean isOdd(int input) {
		return input % 2 != 0;
	}

	/**
	 * 偶数校验
	 * 
	 * @param input
	 * @return
	 */
	public static boolean isEven(int input) {
		return input % 2 == 0;
	}

	/**
	 * 格式化数字
	 * 
	 * @param dValue
	 * @param iScale
	 * @return
	 */
	public static String formatNumber(double dValue, int iScale) {
		if (Double.isNaN(dValue)) {
			return "";
		}
		DecimalFormat df = null;
		StringBuffer sPattern = new StringBuffer(",##0");
		if (iScale > 0) {
			sPattern.append(".");
			for (int i = 0; i < iScale; i++) {
				sPattern.append("0");
			}
		}
		df = new DecimalFormat(sPattern.toString());
		return df.format(dValue);
	}

	/**
	 * 解析Double类型
	 * 
	 * @param text
	 * @return
	 */
	public static double parseDouble(String text) {
		int index = text.indexOf(",");
		String sbNumber = "";
		while (index != -1) {
			sbNumber += text.substring(0, index);
			text = text.substring(index + 1, text.length());
			index = text.indexOf(",");
		}
		sbNumber += text;
	
		return Double.parseDouble(sbNumber);
	}

	/**
	 * 解析Long类型
	 * 
	 * @param text
	 * @return
	 */
	public static long parseLong(String text) {
		int index = text.indexOf(",");
		String sbNumber = "";
		while (index != -1) {
			sbNumber += text.substring(0, index);
			text = text.substring(index + 1, text.length());
			index = text.indexOf(",");
		}
		sbNumber += text;
	
		return Long.parseLong(sbNumber);
	}

	/**
	 * 取出一个指定长度大小的随机正整数.
	 * 
	 * @param length int 设定所取出随机数的长度。length小于11
	 * @return int 返回生成的随机数。
	 */
	public int buildRandom(int length) {
		int num = 1;
		double random = Math.random();
		if (random < 0.1) {
			random = random + 0.1;
		}
		for (int i = 0; i < length; i++) {
			num = num * 10;
		}
		return (int) ((random * num));
	}

	// ***************************************************

	/**
	 * 测试方法
	 */
	public static void main(String[] args) {
		Double aaa = formatDouble("15");
		
	}
}
